//#include <queue>

class Nodo{
  int CoX;
  int CoY;
  int cost;
  int prof;
  Nodo* father;
  float f;
 public:
  Nodo();
  ~Nodo();
  Nodo(int CoX_v, int CoY_v, int cost_v, int prof,
       Nodo* father_v, float f_v);
  int get_coX()const;
  int get_coY()const;
  int get_cost()const;
  int get_prof()const;
  Nodo* get_father()const;
  float get_f()const;
  void set_coX(int CoX_v);
  void set_coY(int CoY_v);
  void set_cost(int cost_v);
  void set_prof(int prof_v);
  void set_father(Nodo* father_v);
  void set_f(float f_v);
  void set(int CoX_v, int CoY_v, int prof_v, Nodo* father_v);
  bool esSolucion(int* coord_destino);
  void toString()const;
};

Nodo::Nodo(){
  CoX = 0;
  CoY = 0;
  cost = 0;
  prof = 0;
  father = NULL;
  f = 0;
}

Nodo::Nodo(int CoX_v, int CoY_v, int cost_v, int prof_v,
	   Nodo* father_v, float f_v){
  CoX = CoX_v;
  CoY = CoY_v;
  cost = cost_v;
  prof = prof_v;
  father = father_v;
  f = f_v;
}

int Nodo::get_coX()const{
  return CoX;
}

int Nodo::get_coY()const{
  return CoY;
}

int Nodo::get_cost()const{
  return cost;
}

int Nodo::get_prof()const{
  return prof;
}


Nodo* Nodo::get_father()const{
  return father;
}

float Nodo::get_f()const{
  return f;
}

void Nodo::set_coX(int CoX_v){
  CoX = CoX_v;
}

void Nodo::set_coY(int CoY_v){
  CoY = CoY_v;
}

void Nodo::set_cost(int cost_v){
  cost = cost_v;
}

void Nodo::set_prof(int prof_v){
  cost = prof_v;
}

void Nodo::set_father(Nodo* father_v){
  father = father_v;
}

void Nodo::set_f(float f_v){
  f = f_v;
}

void Nodo::set(int CoX_v, int CoY_v, int cost_v,
	       Nodo* father_v){ // cost_v es el coste de la posición (x.y)
  CoX = CoX_v;
  CoY = CoY_v;
  /* if (father_v->get_cost() == 0) */
  /*   cost = 100 + cost_v; */
  /* else */
  cost = father_v->get_cost()+ cost_v;
  prof = father_v->get_prof()+1;
  father = father_v;
}

bool Nodo::esSolucion(int *coord_destino){
  if (CoX == coord_destino[0] && CoY == coord_destino[1])
    return true;
  else
    return false;
}

void Nodo::toString()const{
  cout << "(" << CoX << "," << CoY << ") " << "coste: " << cost << endl;
  // cout << "  prof: " << prof<< endl;
}

Nodo::~Nodo(){
}

